﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmBajasFiltro : Form
    {
        public frmBajasFiltro()
        {
            InitializeComponent();
        }

        private void IniciarControles()
        {
            cboZona.Enabled = false;
            dtpDesde.Enabled = false;
            dtpHasta.Enabled = false;

            ckbLocalidad.CheckState = CheckState.Checked;
        }

        private void frmBajasFiltro_Load(object sender, EventArgs e)
        {
            IniciarControles();
            FindLocalidades();
        }

        private void FindLocalidades()
        {
            try
            {
                cboLocalidad.DisplayMember = "localidad";
                cboLocalidad.ValueMember = "id";
                cboLocalidad.DataSource = Localidades.FindAll();

                if (cboLocalidad.Items.Count != 0)
                {
                    FindZonasPorLocalidadId(Convert.ToInt32(cboLocalidad.SelectedValue));
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void FindZonasPorLocalidadId(int localidad_id)
        {
            try
            {
                cboZona.DisplayMember = "zona";
                cboZona.ValueMember = "id";
                cboZona.DataSource = Negocio.Zonas.FindAllPorLocalidad(localidad_id);
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void cboLocalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            FindZonasPorLocalidadId(Convert.ToInt32(cboLocalidad.SelectedValue));
        }

        private void ckbLocalidad_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbLocalidad.CheckState == CheckState.Checked)
                cboLocalidad.Enabled = true;
            else
                cboLocalidad.Enabled = false;
        }

        private void ckbZona_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbZona.CheckState == CheckState.Checked)
                cboZona.Enabled = true;
            else
                cboZona.Enabled = false;
        }

        private void ckbFechas_CheckedChanged(object sender, EventArgs e)
        {
            if(ckbFechas.CheckState == CheckState.Checked)
            {
                dtpHasta.Enabled = true;
                dtpDesde.Enabled = true;
            }
            else
            {
                dtpDesde.Enabled = false;
                dtpHasta.Enabled = false;
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGenerar_Click(object sender, EventArgs e)
        {
            IList<SocioBaja> result = FiltrarForm();

            frmBajasHistoricoReporte frm = new frmBajasHistoricoReporte(result);
            frm.MdiParent = this.MdiParent;
            frm.Show();
        }


        private IList<SocioBaja> FiltrarForm()
        {
            IList<SocioBaja> result = new List<SocioBaja>();

            int? localidad_id = ckbLocalidad.Checked ? (int?)cboLocalidad.SelectedValue : null;
            int? zona_id = ckbZona.Checked ? (int?)cboZona.SelectedValue : null;
            DateTime? desde = ckbFechas.Checked ? (DateTime?)dtpDesde.Value : null;
            DateTime? hasta = ckbFechas.Checked ? (DateTime?)dtpHasta.Value : null;

            try
            {
                result = Negocio.Socios.FindAllBajasFiltro(localidad_id, zona_id, desde, hasta);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
          
            return result;
        }

    }
}
